package org.uca.dss.curso2011.grupo1;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.uca.dss.curso2011.grupo1.basededatos.DBUtils;
import org.uca.dss.curso2011.grupo1.clases.RepartoAsientos;
import org.uca.dss.curso2011.grupo1.clases.RepartoAsientosIncremental;
import org.uca.dss.curso2011.grupo1.interfazExtendido.CriterioAsientos;
import org.uca.dss.curso2011.grupo1.interfazExtendido.CriterioAsientosDiferentes;
import org.uca.dss.curso2011.grupo1.interfazExtendido.InformacionTrayecto;
import org.uca.dss.curso2011.grupo1.interfazExtendido.InterfazListados;
import org.uca.dss.curso2011.grupo1.interfazExtendido.InterfazCompras;
import org.uca.dss.curso2011.grupo1.interfazExtendido.Itinerario;
import org.uca.dss.curso2011.grupo1.reservas.GestionReservas;
import org.uca.dss.curso2011.grupo1.reservas.GestionReservasExtendidas;



/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args ) throws FileNotFoundException, FileNotFoundException, FileNotFoundException, IOException
    {
/*
        DBUtils.initDataBase("reservastests.dat");

        GestionReservas  gestion= new GestionReservas("trenest1.csv",3,"trayectost1.csv",6);

        InterfazListados listado = gestion.obtieneListados();

        List<LocalTime> list = listado.getHorarios("sevilla", "huelva", new LocalDate());
        System.out.println(list.get(0));

        InterfazCompras compras = gestion.obtieneCompras();
        
        int asiento = compras.asientosLibres("sevilla", "huelva", new LocalDate(), list.get(0));
        System.out.println(asiento);

        String codigo = compras.reservaAsiento("sevilla", "huelva", new LocalDate(), list.get(0));
        System.out.println(codigo);

        String codigo2 = compras.reservaAsiento("sevilla", "huelva", new LocalDate(), list.get(0));
        System.out.println(codigo2);

        asiento = compras.asientosLibres("sevilla", "huelva", new LocalDate(), list.get(0));
        System.out.println(asiento);

        compras.cancelaReserva(codigo);

        compras.cancelaReserva(codigo2);

        asiento = compras.asientosLibres("sevilla", "huelva", new LocalDate(), list.get(0));
        System.out.println(asiento);
        
        double precio = compras.getPrecio("sevilla", "huelva", new LocalDate(), new LocalTime("9:00"));
        System.out.println(precio);


        DBUtils.clear();
    */
        DBUtils.initDataBase("reservastests.dat");

        RepartoAsientos repartoAsientos = new RepartoAsientosIncremental();
        CriterioAsientos criterioAsientos = new CriterioAsientosDiferentes();
        GestionReservasExtendidas gestion = new GestionReservasExtendidas("trenest1.csv",3 , "trayectost1.csv",6, repartoAsientos,criterioAsientos);
        InterfazListados listados = gestion.obtieneListados();
        InterfazCompras compras = gestion.obtieneCompras();

        LocalDate hoy = new LocalDate();
         List<Itinerario> itinerarios = listados.getItinerarios("cádiz", "sevilla", hoy);


         System.out.println(itinerarios.size());


        Random random = new Random();
        int pos = random.nextInt(itinerarios.size());

        Itinerario itinerarioElegido = itinerarios.get(pos);


        // Reservo hasta que no puedo puedo más
        while (compras.asientosLibres(hoy, itinerarioElegido )>0) {
            System.out.println(compras.asientosLibres(hoy, itinerarioElegido ));
            compras.reservaAsiento(itinerarioElegido, hoy);
        }

        System.out.println(compras.asientosLibres(hoy, itinerarioElegido ));

        List<Itinerario> itinerarios2 = listados.getItinerarios("cádiz", "sevilla", hoy);
        System.out.println(itinerarios2.size());

        List<Itinerario> itinerariosDisponibles = new ArrayList();

        for(Itinerario itinerario : itinerarios)
        {   boolean disponible = true;
            for (InformacionTrayecto informacionTrayecto: itinerarioElegido){
                if(itinerario.contains(informacionTrayecto)){
                   disponible = false; 
                }
            }
            
            if(disponible){
                itinerariosDisponibles.add(itinerario);
            }
        }


        System.out.println(itinerariosDisponibles.equals(itinerarios2));
         DBUtils.clear();
        
    }
}
